{-----------------------------------------------------------------
 
  (c) 2008-2009 Markus Dittrich 
 
  This program is free software; you can redistribute it 
  and/or modify it under the terms of the GNU General Public 
  License Version 3 as published by the Free Software Foundation. 
 
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License Version 3 for more details.
 
  You should have received a copy of the GNU General Public 
  License along with this program; if not, write to the Free 
  Software Foundation, Inc., 59 Temple Place - Suite 330, 
  Boston, MA 02111-1307, USA.

--------------------------------------------------------------------}


-- | this module parses the SLOT info of a package
module Parsers.Slot ( get_slot 
                    , try_get_slot
                    ) where 


-- imports
import qualified Data.ByteString as B(ByteString)
import Prelude
import System.FilePath.Posix((</>))


-- local imports
import Helpers.ByteString(remove_last_newline)
import Helpers.FileIO(read_file, try_read_file)



-- | open the SLOT info of a package and return as a
-- ByteString
get_slot :: FilePath -> IO B.ByteString
get_slot p = read_file (p </> "SLOT") 
             >>= \item -> return $ remove_last_newline item


-- | same as get_slot but uses try_read so we can handle
-- failure in opening a SLOT file during execution
try_get_slot :: FilePath -> IO (Maybe B.ByteString)
try_get_slot p = try_read_file (p </> "SLOT")
                 >>= \item -> 
                   case item of
                     Just v -> return . Just $ remove_last_newline v
                     _      -> return item
